class: inverse,left, middle background-image: url(data:image/png;base64,#background.png) background-size: cover <img src="data:image/png;base64,#LOGO_DIPLOMADO.png" width="500px"/> ##Módulo 1: Geoinformática utilizando el entorno de R ### Geoprocesos Matías Olea <br> <a href="https://orcid.org/0000-0003-0194-7784"> ORCID </a><br> matias.olea@pucv.cl</a><br> .large[<b><a href="https://www.pucv.cl/uuaa/site/edic/base/port/labgrs.html">LabGRS</a> | Agosto 2025</b>] <br> --- ## Contenidos .pull-left[ 1) Repaso de tipo de operaciones a un vector geográfico 2) Fusión de tablas. 3) Geoprocesos. ] .pull-right[ <img src="data:image/png;base64,#https://raw.githubusercontent.com/allisonhorst/stats-illustrations/main/rstats-artwork/r_rollercoaster.png" width="650px"/> ] --- ### Tipos de operaciones -- <img src="data:image/png;base64,#procesos.png" width="1000px" align = "center"/> -- - **Consultas**: se caracterizan por no modificar la información temática o geométrica del dato espacial original ni la georreferencia de este (localización). - **Transformación**: estas no modifican la información temática o geométrica del dato espacial original pero sí modifican la georreferencia de este. - **Alteración**: estas operaciones modifican la información temática o geométrica del dato espacial original y no modifican le georreferencia de este. --- ### Fusión de tablas **Join de tabla**: Nos permite combinar información desde una tabla externa con nuestros objetos espaciales empleando un campo clave común entre ambos. <img src="data:image/png;base64,#join.png" width="1000px" align = "center"/> --- ### Fusión de tablas <img src="data:image/png;base64,#relaciones.png" width="800px" align = "center"/> --- ### Fusión de tablas ``` r library(tidyverse) # ciencia de datos library(sf) # Simple Feature / analisis de datos espaciales vectoriales tab_comunas <- read_csv("TuDirectorioPersonal/Comunas_Maule_latlon.csv") vect_salud <- read_sf("TuDirectorioPersonal/Establec_salud_Maule.shp") ``` Haremos un join de tablas juntando la tabla de comunas al vector de salud (puntos) ``` r vect_salud_join <- merge( x = vect_salud, # vector geografico y = tab_comunas, # tabla con informacion nueva by.x = "C_COM", # columna clave/indice en X (argumento) by.y = "CUT_COM", # columna clave/indice en Y (argumento) all.x = T # mantenemos todas las entidades del vector (aunque no tengan par en la tabla) ) ``` --- ### Fusión de tablas **Join espacial**: Permite la unión de información de dos capas espaciales diferentes basado en relaciones espaciales. <img src="data:image/png;base64,#espacial.png" width="800px" align = "center"/> .footnote[ <span style="font-size:9pt"> Imágenes de relaciones espaciales de ESRI </span> ] --- ### Fusión de tablas ``` r vect_comunas <- read_sf("TuDirectorioPersonal/Comunas_Maule_latlon.shp") ``` Ahora uniremos espacialmente la información del nivel de complejidad de los establecimientos de salud (puntos) a las comunas (poligono). ``` r plot(vect_comunas$geometry) plot(vect_salud$geometry, add=T) ``` <img src="data:image/png;base64,#GEO455_C3_files/figure-html/unnamed-chunk-6-1.png" width="100%" /> --- ### Fusión de tablas ``` r vect_comunas_ejoin <- st_join(vect_comunas, # vector base vect_salud["NIVEL_COM"], # vector a extraer informacion + columna join = st_intersects # relacion espacial ) ``` ``` r nrow(vect_salud) ``` ``` ## [1] 396 ``` ``` r nrow(vect_comunas) ``` ``` ## [1] 30 ``` ``` r nrow(vect_comunas_ejoin) ``` ``` ## [1] 396 ``` --- ### Fusión de tablas ``` r plot(vect_comunas_ejoin["NIVEL_COM"]) ``` <img src="data:image/png;base64,#GEO455_C3_files/figure-html/unnamed-chunk-10-1.png" width="100%" /> --- ### Geoprocesos: Consultas - **Consulta simple**: Identifica un vector o parte de el junto con sus características asociadas. - **Consulta booleana**: Consulta o serie de consultas que se realizan a través de operadores sencillos de consulta lógica. - **Consulta espacial**: Este tipo de consulta se realiza utilizando dos objetos espaciales: uno para seleccionar y otro que indica el lugar de la selección. --- ### Geoprocesos: Consulta simple ``` r st_crs(vect_salud) # referencia espacial ``` ``` ## Coordinate Reference System: ## User input: WGS 84 ## wkt: ## GEOGCRS["WGS 84", ## DATUM["World Geodetic System 1984", ## ELLIPSOID["WGS 84",6378137,298.257223563, ## LENGTHUNIT["metre",1]]], ## PRIMEM["Greenwich",0, ## ANGLEUNIT["degree",0.0174532925199433]], ## CS[ellipsoidal,2], ## AXIS["latitude",north, ## ORDER[1], ## ANGLEUNIT["degree",0.0174532925199433]], ## AXIS["longitude",east, ## ORDER[2], ## ANGLEUNIT["degree",0.0174532925199433]], ## ID["EPSG",4326]] ``` --- ### Geoprocesos: Consulta simple ``` r st_geometry(vect_salud) # geometría del objeto ``` ``` ## Geometry set for 396 features ## Geometry type: POINT ## Dimension: XY ## Bounding box: xmin: -72.66597 ymin: -36.38745 xmax: -70.81315 ymax: -34.68829 ## Geodetic CRS: WGS 84 ## First 5 geometries: ``` ``` r st_bbox(vect_salud) # extensión ``` ``` ## xmin ymin xmax ymax ## -72.66597 -36.38745 -70.81315 -34.68829 ``` --- ### Geoprocesos: Consulta booleana ¿Cuántos establecimientos de la región disponen de atención de urgencias? ``` r vect_salud %>% filter(URGENCIA == "SI") %>% nrow() ``` ``` ## [1] 59 ``` -- Número de establecimientos con dependencia administrativa municipal ``` r vect_salud %>% filter(DEPEN_A == "Municipal") %>% nrow() ``` ``` ## [1] 278 ``` **TAREA 1**: ¿Cuantos de establecimientos con urgencias en la comuna de Talca? --- ### Geoprocesos: Transformacion **Cambio de proyección**: este proceso es el más útil cuando queremos asegurar que toda nuestra información esté en el mismo sistema o para modificar la información para su despliegue cartográfico.La función para realizar el cambio de proyección sobre vectores es **st_transform()** ``` r vect_comunas_ejoin_utm <- vect_comunas_ejoin %>% st_transform(32719) # código EPSG ``` No confundir con la función **st_set_crs()**, que permite asignar un CRS a una capa que no lo tenga incorporado. --- ### Geoprocesos: Transformacion **Rasterizacion**: transfiere valores asociados a una entidad geométrica a una capa ráster. *sf* no tiene una función que permita hacerlo, pero sí el paquete **terra**. ``` r comunas_utm <- vect_comunas_ejoin_utm %>% terra::vect() ``` Luego creamos un ráster vacío. ``` r raster_vacio <- terra::rast(comunas_utm, # SpatVector res = 1000, # resolucion del objeto de salida crs = "epsg:32719" # CRS de referencia ) ``` --- ### Geoprocesos: Transformacion ``` r raster_sup <- terra::rasterize( x = comunas_utm, # vector a rasterizar y = raster_vacio, # raster a rellenar con datos field = "SUPERFICIE" ) ``` --- ### Geoprocesos: Transformacion ``` r terra::plot(raster_sup) ``` <img src="data:image/png;base64,#GEO455_C3_files/figure-html/unnamed-chunk-19-1.png" width="100%" /> --- ### Geoprocesos: Transformacion **Conversión entre formatos** es otra función de tranfromación clave que permite exportar archivos a una extensión particular. La función **st_write()** permite exportar archivos vectoriales a disco considerando diferentes formatos. ``` r st_write(vect_comunas_ejoin_utm, dsn = "ejoin_comunas_maule.shp") # Esri shapefile st_write(vect_comunas_ejoin_utm, dsn = "ejoin_comunas_maule.gpkg") # geopackage st_write(vect_comunas_ejoin_utm, dsn = "ejoin_comunas_maule.csv") # csv st_write(vect_comunas_ejoin_utm, dsn = "ejoin_comunas_maule.geojson") # geojson ``` **TAREA 2**: Calcule los centroides de las comunas del Maule utilizando la libreria sf. --- ### Geoprocesos: Alteración Las operaciones de alteración son las más comunes en el ámbito del trabajo con geodatos. Son aquellas en dónde la manipulación es mayor y el vector de entrada es diferente al de salida, es decir, puede cambiar la cantidad de datos asociados en términos de información y/o geometría. Entre las operaciones más comunes podemos encontrar: **Áreas de influencia (Buffers)** **Cortar (clip)** **Disolver (Dissolve)** **Unión** --- ### Geoprocesos: Alteración **Buffer**: Permite la creación de radios o áreas de influencia a partir de puntos, líneas o polígonos. Para una fácil creación, se recomienda trabajar con un sistema métrico de proyección métrica. ``` r vect_salud_utm <- vect_salud %>% st_transform(32719) # código EPSG ``` Vamos a seleccionar solo algunas de nuestros puntos para la comuna de Talca y de dependencia distinto a la privada. ``` r salud_talca_priv <- vect_salud_utm %>% filter(NOM_COM == "Talca" & DEPEN_A != "Privado") ``` --- ### Geoprocesos: Alteración ``` r buffer_noDissolve <- salud_talca_priv %>% st_buffer(2000) # buffer 2 km sin disolver plot(buffer_noDissolve$geometry, axes = T) plot(salud_talca_priv$geometry, add=T, col = "red") ``` <img src="data:image/png;base64,#GEO455_C3_files/figure-html/unnamed-chunk-23-1.png" width="100%" /> --- ### Geoprocesos: Alteración ``` r buffer_Dissolve <- salud_talca_priv %>% st_buffer(2000) %>% # buffer 2 km st_union() plot(buffer_Dissolve, axes=T) plot(salud_talca_priv$geometry, add=T, col = "red") ``` <img src="data:image/png;base64,#GEO455_C3_files/figure-html/unnamed-chunk-24-1.png" width="100%" /> --- ### Geoprocesos: Alteración **TAREA 3**: (a) **Cortar**. Utilizando las funciones **st_crop** y **st_intersection** recorte por separado el vector de "Vialidad Maule" a la comuna de Constitucion. ¿Cual es la diferencia entre ambas? (b) **Dissolve**. Utilizando la función ocuada en el buffer disuelto, realice un dissolve de toda la región del Maule. ¿Cual cree que es la diferencia con la siguiente alternativa ...? ``` r comunas_diss <- vect_comunas_ejoin_utm %>% group_by(REGION) %>% summarise() ``` --- ### Bibliografía 2017 Wickham, H., & Grolemund, G. R for data science: import, tidy, transform, visualize, and model data. " O'Reilly Media, Inc.". <a href="https://r4ds.had.co.nz/"> (Online) </a><br> 2024 Lovelace, R., Nowosad, J., & Muenchow, J. Geocomputation with R. Chapman and Hall/CRC. <a href="https://r.geocompx.org/index.html"> (Online) </a><br>